package cn.xk.ymcc.exception;

import cn.xk.ymcc.code.GlobalErrorCode;
import cn.xk.ymcc.result.JSONResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.List;


//系统发生异常的时候-拦截请求
@RestControllerAdvice
public class GlobalExceptionHandler {

    /*
        根据异常类型,定位执行哪个方法
     */
    @ExceptionHandler(value = {Exception.class})
    public JSONResult systemError(Exception exception){

        exception.printStackTrace();

        return JSONResult.error(GlobalErrorCode.SYSTEM_EXCEPTION);
    }

    /*
        当发生BusinessException异常的时候 执行以下代码
     */
    @ExceptionHandler(value = {BusinessException.class})
    public JSONResult businessError(BusinessException ex){
        String message = ex.getMessage();
        /*
            自己定义的业务异常
         */
        return JSONResult.error(message,"-6000");
    }
    /*
        处理JSR303 异常信息 方法
     */
    @ExceptionHandler(value = {MethodArgumentNotValidException.class})
    public JSONResult jsr303Error(MethodArgumentNotValidException ex){
        StringBuffer sb = new StringBuffer();
        //ex.getBindingResult().getAllErrors().get(0).defaultMessage
        List<ObjectError> list = ex.getBindingResult().getAllErrors();
        list.forEach(er->{
            sb.append(er.getDefaultMessage()).append(",");

        });
        /*
            自己定义的业务异常
         */
        return JSONResult.error(sb.toString(),"-2001");
    }


}
